const appointmentService = require('../../services/appointment');
const util = require('../../utils/util');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    isLoading: true,           // 是否正在加载
    currentTab: null,          // 当前选中的标签页，null表示全部
    tabList: [                 // 标签页列表
      { name: '全部', value: null },
      { name: '待确认', value: 0 },
      { name: '已确认', value: 1 },
      { name: '已完成', value: 2 },
      { name: '已取消', value: 3 }
    ],
    appointments: [],          // 预约列表
    appointmentTypes: ['普通就诊', '疫苗接种', '绝育手术', '其他'],  // 预约类型
    page: 1,                   // 当前页码
    size: 10,                  // 每页大小
    hasMore: true,             // 是否有更多数据
    error: null,               // 错误信息
    loadingMore: false         // 是否正在加载更多
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    console.log('预约列表页面加载，参数：', options);
    
    // 如果传入了状态参数，设置当前标签页
    if (options.status !== undefined) {
      // 将字符串转为数字
      const status = parseInt(options.status);
      console.log('设置当前标签页为:', status);
      this.setData({ 
        currentTab: status
      });
    }
    
    this.loadAppointments(true);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    this.refreshData();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    if (this.data.hasMore && !this.data.loadingMore) {
      this.loadMore();
    }
  },

  /**
   * 切换标签页
   */
  switchTab: function (e) {
    const status = e.currentTarget.dataset.status;
    console.log('切换标签页:', status);
    
    // 如果点击的是当前已选中的标签，不做任何操作
    if (status === this.data.currentTab) return;
    
    this.setData({
      currentTab: status,
      page: 1,
      appointments: [],
      hasMore: true
    });
    
    this.loadAppointments(true);
  },

  /**
   * 加载预约列表
   */
  loadAppointments: function (showLoading = false) {
    if (showLoading) {
      this.setData({ isLoading: true, error: null });
    }
    
    if (this.data.loadingMore) {
      return;
    }
    
    const status = this.data.currentTab;
    const page = this.data.page;
    const size = this.data.size;
    
    console.log(`加载预约列表：状态=${status}, 页码=${page}, 每页=${size}`);
    
    this.setData({ loadingMore: true });
    
    appointmentService.getUserAppointments(status, page, size)
      .then(res => {
        console.log('获取预约列表成功：', res);
        
        // 检查返回的数据结构
        const list = res && res.records ? res.records : [];
        
        if (Array.isArray(list)) {
          // 处理预约数据，格式化时间等
          const appointments = list.map(item => {
            // 确保状态是数字类型
            const status = typeof item.status === 'string' ? parseInt(item.status) : (item.status || 0);
            
            return {
              id: item.id,
              userId: item.userId,
              petId: item.petId,
              staffId: item.staffId,
              departmentId: item.departmentId,
              type: item.type !== undefined ? item.type : 0,
              description: item.description || '',
              remark: item.remark || '',
              status: status,
              
              // 确保相关名称字段存在
              petName: item.petName || (item.extraData && item.extraData.petName) || '未知宠物',
              staffName: item.staffName || (item.extraData && item.extraData.staffName) || '未知医生',
              departmentName: item.departmentName || (item.extraData && item.extraData.departmentName) || '未知科室',
              
              // 处理日期时间
              appointmentTime: item.appointmentTime ? util.formatDateTime(new Date(item.appointmentTime)) : '未设置',
              createTime: item.createTime ? util.formatDate(new Date(item.createTime)) : '未设置',
              updateTime: item.updateTime ? util.formatDate(new Date(item.updateTime)) : '未设置'
            };
          });
          
          // 合并数据
          const newAppointments = page === 1 
            ? appointments 
            : [...this.data.appointments, ...appointments];
          
          this.setData({
            appointments: newAppointments,
            isLoading: false,
            loadingMore: false,
            hasMore: list.length === size,
            page: page + 1,
            error: null
          });
        } else {
          console.error('预约列表返回格式错误：', res);
          this.setData({
            isLoading: false,
            loadingMore: false,
            error: '获取预约列表格式错误'
          });
        }
        
        if (showLoading) {
          wx.stopPullDownRefresh();
        }
      })
      .catch(err => {
        console.error('获取预约列表失败：', err);
        this.setData({
          isLoading: false,
          loadingMore: false,
          error: err.message || '获取预约列表失败，请稍后重试'
        });
        
        if (showLoading) {
          wx.stopPullDownRefresh();
        }
      });
  },

  /**
   * 加载更多数据
   */
  loadMore: function () {
    if (!this.data.hasMore || this.data.loadingMore) return;
    this.loadAppointments();
  },

  /**
   * 刷新数据
   */
  refreshData: function () {
    this.setData({
      page: 1,
      appointments: [],
      hasMore: true
    });
    this.loadAppointments(true);
  },

  /**
   * 导航到预约详情页
   */
  navigateToDetail: function (e) {
    const id = e.currentTarget.dataset.id;
    console.log('导航到预约详情页：', id);
    wx.navigateTo({
      url: `/pages/appointment/detail?id=${id}`
    });
  },

  /**
   * 重试加载数据
   */
  retry: function () {
    this.refreshData();
  }
});
